﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Biblioteca.Interfaces;
using System.Data;

namespace Biblioteca.Models
{
    public class CuentaUsuarioModel : ICuentaUsuario
    {
        private BibliotecaStore db;

        public CuentaUsuarioModel(BibliotecaStore data)
        {
            this.db = data;
        }

        public void crearCuentaUsuario(Cuenta cuenta, int user)
        {
            //guardo la cuenta nueva
            db.Cuentas.AddObject(cuenta);
            //guardo los cambios para que Entity me guarde el id dentro de la cuenta
            db.SaveChanges();
            //genero la cuenta nueva
            CuentaUsuario cu = new CuentaUsuario();
            cu.Activada = Byte.Parse("1");
            cu.Cuenta = cuenta.IdCuenta;
            cu.Usuario = user;
            db.CuentaUsuarios.AddObject(cu);
            //guardo los cambios
            db.SaveChanges();
        }

        public void modificarCuenta(Cuenta cuenta)
        {
            db.Cuentas.Attach(cuenta);
            db.ObjectStateManager.ChangeObjectState(cuenta, EntityState.Modified);
            db.SaveChanges();
        }

        public void eliminarCuenta(CuentaUsuario c, int nuevoEstado)
        {
            c.Activada = byte.Parse(nuevoEstado + "");
            //db.CuentaUsuarios.Attach(c);
            db.ObjectStateManager.ChangeObjectState(c, EntityState.Modified);
            db.SaveChanges();
        }

        public Cuenta getSingle(int id)
        {
            return db.Cuentas.Single(c => c.IdCuenta == id);
        }

        public CuentaUsuario getSingle(int idCuenta, int idSocio)
        {
            return db.CuentaUsuarios.Single(m => m.Cuenta == idCuenta && m.Usuario == idSocio);
        }

        public IList<CuentaUsuario> getAll()
        {
            return db.CuentaUsuarios.Include("Usuario1").ToList();
        }


        public int getID(string usuario)
        {
            return this.db.CuentaUsuarios.Where(m => m.Cuenta1.Usuario == usuario).Where(m => m.Activada == 1).Select(m => m.Usuario1.IdUsuario).First();
        }
        


        public IList<Cuenta> getUsuariosConditional()
        {
            return db.CuentaUsuarios.Where(m => m.Usuario1.Tipo == 2).OrderBy(m => m.Cuenta1.Usuario).Select(t => t.Cuenta1).ToList();
        }


        public int getID(int idCuenta)
        {
            return this.db.CuentaUsuarios.Where(m => m.Cuenta == idCuenta).Where(a => a.Activada == 1).Single().Usuario1.IdUsuario;
        }
    }
}